﻿'********************************************************************************
'*
'*      モールド　フォーム
'*
'*      File Name : frmStartCompleteMoldCheck.vb
'*      Title     : モールドチェック着工/完了履歴画面
'*      機能    　：モールドチェック工程
'*
'********************************************************************************
'----------------------------------<<修正履歴>>----------------------------------
'ﾊﾞｰｼﾞｮﾝ   日付       作業者        ｺﾒﾝﾄ
'--------- ---------- ------------ -----------------------------------------------
' V1.0.0   2019/10/01 MJF         新規作成

'********************************************************************************

Imports System.Text

Public Class frmStartCompleteMoldCheck

    '>>2018/1/31 佐川 キャリア交換対応
    '実行モード
    '0:表示 1:着工 2:製造完成 3:計上完成
    Private execMode As String = VIEW
    '<<2018/1/31 佐川 キャリア交換対応

    '照合結果設定
    Public Overrides Sub SetPassScore()
        PASS_SCORE = 1
        ReDim m_iScore(PASS_SCORE - 1)
        m_iScore = {1}
    End Sub

    'タブコントロールの設定
    Public Overrides Sub SetTabControl()
        TabPageLot.Enabled = False
        TabPageEqp.Enabled = False
    End Sub
    Overrides Sub selectTab()
        tabBase.SelectedIndex = 2

        Me.UpdateStyles() 'ADD 苗 2018/2/3
    End Sub
    'イベント設定
    Public Overrides Sub SetHandler()
        '画面初期化
        InputDataClear()

        ' ラックNo
        AddHandler btnBarCode3.Click, AddressOf btnAfterRackNo_Click
        AddHandler txt0402.KeyPress, AddressOf afterRackNo_KeyPress
        AddHandler txt0403.KeyPress, AddressOf afterRackNo_KeyPress

        btnBarCode3.PerformClick()


    End Sub

    'Public Overrides Sub SetFocus()
    '    txt0402.Enabled = True
    '    txt0402.Focus()
    'End Sub
    '完了MSラックNo入力処理
    Private Sub afterRackNo_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)

        '頭に付いている'%'を消す
        Static Dim fIsPercentInput As Boolean = False
        If e.KeyChar = CChar("%") OrElse e.KeyChar = CChar("％") Then
            fIsPercentInput = True
            e.Handled = True
            Exit Sub
        End If
        If fIsPercentInput Then
            fIsPercentInput = False
            e.Handled = True
            Exit Sub
        End If

        If e.KeyChar = vbCr Then
            Dim txtData As TextBox = CType(sender, TextBox)
            txtData.Text = txtData.Text.ToUpper 'Add 苗 2018/4/10
            Dim lblSys As Label = txtData.Parent.Controls.Find(String.Format("lbl{0}", txtData.Name.ToString.Substring(3, 4)), False)(0)
            Dim lblMsg As Label = txtData.Parent.Controls.Find(String.Format("lbl{0}00", txtData.Tag.ToString), False)(0)
            Dim rackChkFlg As Boolean = False

            If txtData.Name = String.Format("txt{0}02", txtData.Tag.ToString) Then
                ' LostFocusがラックNo1の場合，空白チェックを行う
                If String.IsNullOrEmpty(txtData.Text) Then
                    txtData.BackColor = ERROR_INIT_COLOR
                    lblSys.BackColor = ERROR_INIT_COLOR
                    '>> 2018/2/22 佐川 ラックNo入力動作を統一
                    'txtData.Enabled = False
                    MsgBox(getMsgStr("MSG00020", (lblMsg.Text).Replace(vbCrLf, "")))
                    txtData.Enabled = True
                    txtData.Focus()
                    txtData.SelectAll()
                    '<< 2018/2/22 佐川 ラックNo入力動作を統一
                    Exit Sub
                End If
            End If

            ' 空白じゃない場合，重複チェックを行う
            If Not String.IsNullOrEmpty(txtData.Text) Then
                If Not after_Rack_No_Check(txtData, lblSys) Then
                    txtData.SelectAll() '2018/2/22 佐川 ラックNo入力動作を統一
                    Exit Sub
                End If
                '>>2018/2/1 佐川 RSB確認結果一覧No64

                '<<2018/2/1 佐川 RSB確認結果一覧No64
                '>>20180313 大賀 搬送容器桁数チェックを共通化
                ' ラックNoの桁数チェック
                If Not isCheckCaseLength(txtData, RACK_CASE_NO_LENGTH, lblSys) Then
                    Exit Sub
                End If
                '<<20180313 大賀 搬送容器桁数チェックを共通化
            End If
            'Add 苗 2019/11/24 Begin
            Dim tmpLotNo As String
            tmpLotNo = getLotNoByRack(txtData.Text)
            If txtLotNo.Text = "" Or (tmpLotNo <> "" And txtLotNo.Text <> tmpLotNo) Then
                txtLotNo.Text = tmpLotNo
                If txtLotNo.Text.Trim() <> "" Then
                    txtLotNo_KeyPress(txtLotNo, New KeyPressEventArgs(vbCr))
                    If AutoManualMode = 0 Then
                        setRackNo()
                    End If
                End If
            End If
            'Add 苗 2019/11/24 End
            For i = 2 To 3
                If txtData.Name = String.Format("txt{0}0{1}", txtData.Tag.ToString, i) Then
                    lblSys = txtData.Parent.Controls.Find(String.Format("lbl{0}0{1}", txtData.Tag.ToString, i), False)(0)

                    txtData.BackColor = ENTERED_INIT_COLOR
                    lblSys.BackColor = ENTERED_INIT_COLOR
                    txtData.Enabled = False

                    '2列目以下だったらフォーカスを移す
                    If i < 3 Then
                        Dim nextLbl As Label = txtData.Parent.Controls.Find(String.Format("lbl{0}0{1}", txtData.Tag.ToString, i + 1), False)(0)
                        Dim nextTxtData As TextBox = txtData.Parent.Controls.Find(String.Format("txt{0}0{1}", txtData.Tag.ToString, i + 1), False)(0)

                        nextTxtData.Enabled = True
                        nextTxtData.Focus()
                        nextTxtData.SelectAll()
                        nextTxtData.BackColor = Color.Cyan
                        nextLbl.BackColor = Color.Cyan
                    End If
                End If
            Next

        End If

    End Sub
    Private Sub setRackNo()
        If IsNothing(IcTag.szLotNo) = False Then
            If IcTag.container1 <> "" Then
                txt0402.Text = IcTag.container1
            End If
            If IcTag.container2 <> "" Then
                txt0403.Text = IcTag.container2
            End If

        End If
    End Sub
    '完了MSラックNoチェック
    Protected Function after_Rack_No_Check(ByVal txtData As TextBox, ByVal lblSys As Label) As Boolean
        'ラックNoが削除ラックNoの場合、重複チェックを行わない。
        If DELETE_RACK_NO.Equals(txtData.Text) Then
            Return True
        End If
        Dim lblRack As Label = txtData.Parent.Controls.Find(String.Format("lbl{0}00", txtData.Tag.ToString), False)(0)
        ' 重複チェックを行う
        Dim txtDataCheck As TextBox = txtData.Parent.Controls.Find(String.Format("txt{0}02", txtData.Tag.ToString), False)(0)
        ' LostFocusしたラックNo以外と比較
        If Not txtData.Name.Equals(txtDataCheck.Name) Then
            ' 入力されたラックNoが同じ値の場合
            If txtData.Text.Equals(txtDataCheck.Text) Then
                txtData.BackColor = ERROR_INIT_COLOR
                lblSys.BackColor = ERROR_INIT_COLOR
                '>> 2018/2/22 佐川 ラックNo入力動作を統一
                'txtData.Enabled = False
                MsgBox(getMsgStr("MSG00064", (lblRack.Text).Replace(vbCrLf, "")))
                txtData.Enabled = True
                txtData.Focus()
                txtData.SelectAll()
                '<< 2018/2/22 佐川 ラックNo入力動作を統一
                m_iScore(CInt(txtData.Tag) - 1) = PASS_SCORE_WAIT_CHECK
                Return False
            End If
        End If
        Return True
    End Function
    ' ラックNo用バーコードクリック
    Protected Sub btnAfterRackNo_Click(ByVal sender As Object, ByVal e As EventArgs)
        Dim btn As Button = CType(sender, Button)

        ' 画面の初期化
        'txt0402.Text = String.Empty
        'txt0403.Text = String.Empty
        txt0403.BackColor = TENKEY_INIT_COLOR
        lbl0403.BackColor = TENKEY_INIT_COLOR

        ' 入力フォーカスの設定
        Dim txtData As TextBox = btn.Parent.Controls.Find(String.Format("txt{0}02", btn.Tag.ToString), False)(0)
        Dim lblData As Label = txtData.Parent.Controls.Find(String.Format("lbl{0}02", txtData.Tag.ToString), False)(0)
        txtData.Enabled = True
        txtData.Focus()
        txtData.SelectAll()
        txtData.BackColor = Color.Cyan
        lblData.BackColor = Color.Cyan
    End Sub
    'Lot Noでデータベースからデータを取得する
    Public Overrides Sub GetDataByIcTag()

        '初期化
        InputDataClear()

        'ICタグのデータで画面を設定する
        SetFromTag()
        setGridViewLot()

        If String.IsNullOrEmpty(IcTag.szUID) Then
            IcTag = LastTag
        End If

        '条件テーブル取得
        setJyokenData()


        '工程明細テーブル取得
        setDetailData()
        '明細データの設定
        For Each dr In dtDetailData.Rows
            'If dr("MNF_CND_TAG").Equals(lbl0100.Tag) Then
            '    'レジン型式
            '    txt0103.Text = DBNullTOblank(dr("ACTUAL_MODEL"))
            '    txt0104.Text = DBNullTOblank(dr("MATERIAL_LOT"))
            '    lbl0106.Text = DBNullTOblank(dr("LIMIT_TIME"))
            'ElseIf dr("MNF_CND_TAG").Equals(lbl0200.Tag) Then
            '    '金型
            '    txt0203.Text = DBNullTOblank(dr("ACTUAL_MODEL"))
            'ElseIf dr("MNF_CND_TAG").Equals(lbl0300.Tag) Then
            '    '受入ラックNo
            '    If dr("SEQ") = 1 Then
            '        txt0302.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
            '    ElseIf dr("SEQ") = 2 Then
            '        txt0303.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
            '    ElseIf dr("SEQ") = 3 Then
            '        txt0304.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
            '    ElseIf dr("SEQ") = 4 Then
            '        txt0305.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
            '    ElseIf dr("SEQ") = 5 Then
            '        txt0306.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
            '    End If
            'Else
            If dr("MNF_CND_TAG").Equals(lbl0400.Tag) Then
                '完了MSラックNo
                If dr("SEQ") = 1 Then
                    txt0402.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
                ElseIf dr("SEQ") = 2 Then
                    txt0403.Text = DBNullTOblank(dr("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
                End If
                'DEL 苗 2018/1/24 BEGIN
                'ElseIf dr("MNF_CND_TAG").Equals(lbl0500.Tag) Then
                '    '廃棄フレーム数
                '    lbl0502.Text = dr("ACTUAL_MODEL")
                'DEL 苗 2018/1/24 END
            End If
        Next

        '>>2018/2/13 大賀 サンプル数量対応
        'If IcTag.Status = TagProcessStatus.Ready Then
        '    lblSampleText.Text = m_cSamplingDef.getSamplingMessage(IcTag.szProcsCD, AggregatePKG, g_EQUIP_NO, IcTag.iInput.ToString())
        'Else
        '    Dim getData = dtDetailData.AsEnumerable().FirstOrDefault(Function(x) lblSampleTitle.Tag.Equals(x("MNF_CND_TAG")))
        '    If getData IsNot Nothing Then
        '        lblSampleText.Text = DBNullTOblank(getData("ACTUAL_MODEL")) 'UPD MIAO 2018/11/1
        '    End If
        'End If
        '<<2018/2/13 大賀 サンプル数量対応


        '工程ヘッダーテーブル取得
        getHeadData()

        'ヘッダーの設定
        With m_dtMat
            If .Rows.Count > 0 Then
                '着完情報
                DisplayDate()
            Else
                If m_dtMat.Columns.Count > 0 Then
                    .Rows.Add()
                Else
                    .Columns.Add("BEGIN_TIME")
                    .Rows.Add()
                End If
            End If
        End With


    End Sub

    'ADD miao 2018/8/15 END
    '初期化、背景色の設定
    Public Sub InputDataClear()

        '>>2018/1/31 佐川 キャリア交換対応
        execMode = View
        '<<2018/1/31 佐川 キャリア交換対応

        'ロットタブの初期化
        clearActualModel()

        ''開始作業者No
        'txtOptNoStt.Text = String.Empty
        ''終了作業者No
        'txtOptNoEnd.Text = String.Empty

        txt0402.Text = String.Empty
        txt0403.Text = String.Empty

    End Sub

    '画面データ保存（着工時）
    Public Overrides Function SaveEquipMat(ByRef szBeginTime As DateTime) As Boolean

        '>>2018/1/31 佐川 キャリア交換対応
        execMode = BEGIN
        '<<2018/1/31 佐川 キャリア交換対応

        If saveDetail(BEGIN) < 0 Then
            Return False
        Else
            Return True
        End If
    End Function

    '画面データ保存（製造完成）
    Public Overrides Function SaveCompleteInfo(Optional ByVal status As ProcessStatus = ProcessStatus.ManufComplete) As Integer

        '>>2018/1/31 佐川 キャリア交換対応
        execMode = COMPLETE
        '<<2018/1/31 佐川 キャリア交換対応

        dtDBUpd.Clear()
        Return saveDetail(COMPLETE)
    End Function

    '画面データ保存（計上完成）
    Public Overrides Function SaveTotalInfo() As Integer

        '>>2018/1/31 佐川 キャリア交換対応
        execMode = TOTAL
        '<<2018/1/31 佐川 キャリア交換対応

        '抜取り検査情報を更新
        'RamInspUpdStatus()


        dtDBUpd.Clear()
        Return saveDetail(TOTAL)
    End Function
    'Private Sub RamInspUpdStatus()
    '    Dim objRamInsp As New clsRandomInspection
    '    If lblFailedCnt.Text = "" OrElse lblFailedCnt.Text = "0" Then
    '        '更新DB-抜取り検査の結果：OK
    '        objRamInsp.updateStatus(lotNo, lblProcessCD.Text, "TRUE")
    '    Else
    '        '更新DB-抜取り検査の結果：NG
    '        objRamInsp.updateStatus(lotNo, lblProcessCD.Text, "FALSE")
    '    End If

    'End Sub

    '工程明細テーブル更新処理
    Private Function saveDetail(ByVal type As String) As Integer
        setLotData()
        Dim rowsCnt As Integer = dtDBUpd.Rows.Count
        Dim addIndex As Integer = 0

        If type <> BEGIN Then
            '完了MSラックNo1
            dtDBUpd.Rows.Add()
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG") = lbl0400.Tag
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG_FLG") = CND_TAG_FLG_ELSE
            dtDBUpd.Rows(rowsCnt + addIndex)("SEQ") = 1
            dtDBUpd.Rows(rowsCnt + addIndex)("ACTUAL_MODEL") = txt0402.Text
            addIndex += 1

            '完了MSラックNo2 
            dtDBUpd.Rows.Add()
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG") = lbl0400.Tag
            dtDBUpd.Rows(rowsCnt + addIndex)("MNF_CND_TAG_FLG") = CND_TAG_FLG_ELSE
            dtDBUpd.Rows(rowsCnt + addIndex)("SEQ") = 2
            dtDBUpd.Rows(rowsCnt + addIndex)("ACTUAL_MODEL") = txt0403.Text
            addIndex += 1
        End If
        Return m_cEquipMat.SaveDetail(lotNo, IcTag.szProcsCD, type,
                                      m_szTable, dtDBUpd, m_dtHeader,
                                      m_cIdohyo.EquipInfo.szEquipNo, serverTime)
    End Function



    '画面項目の表示切替
    Public Overrides Sub ConfScreenItem()
        If txtLotNo.TextLength > 0 Then
            If IcTag.Status = TagProcessStatus.Ready Then
                ' 共通部　製造完成ボタン
                btnManufComp.Enabled = False
                ' 共通部　計上完成ボタン
                btnTotalComp.Enabled = False

            ElseIf IcTag.Status = TagProcessStatus.Processing Or IcTag.Status = TagProcessStatus.ManufComplete Then
                ' '不良項目入力
                btnErrInput.Enabled = True

                ' 共通部　製造完成ボタン
                btnManufComp.Enabled = False

                ' 共通部　計上完成ボタン
                btnTotalComp.Enabled = True

                '着工キャンセル
                btnCancel.Enabled = True
            Else
                '不正
                MsgBox(getMsgStr("MSG00025"))

            End If

        End If

    End Sub

    '計上完成正常時の画面初期化
    Protected Overrides Sub initializForm()
        MyBase.initializForm()
        InputDataClear()
        txt0402.Text = ""
        txt0402.Focus()
    End Sub
    Protected Overrides Function isCheckProc() As Boolean
        Return True
    End Function
End Class